﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using qlHieuThuocDongY.Components;
using qlHieuThuocDongY.BusinessLogic;
using qlHieuThuocDongY.BusinessObject;

namespace qlHieuThuocDongY
{
    public partial class frmMain : Form
    {
        // properties
        frmDangNhap fdn = null;
        frmChangePassword fcp = null;
        UserBUS userBus = new UserBUS();

        public frmMain()
        {
            InitializeComponent();
        }


        #region Các hàm xử lý login và phân quyền
        private void DisableMenuLogin(bool logged, string MaNhomNguoiDung = "N001")
        {
            // Nếu hệ thống đăng nhập thành công thì tắt Menu hệ thống
            itemHeThongDangNhap.Enabled = !logged;
            // Nếu hệ thống đăng nhập thành công thì bật Menu đăng xuất
            itemHeThongDangXuat.Enabled = logged;
            // Mặc định thành công thì bật các Menu còn lại
            itemDoiMatKhau.Enabled = logged;
            itemHeThongQLNguoiDung.Enabled = logged;
            itemHeThongBackup.Enabled = logged;
            itemHeThongRestore.Enabled = logged;
            // Menu Quản lý bệnh nhân
            itemHeThongThongTinBenhNhan.Enabled = logged;
            itemHeThongDonThuoc.Enabled = logged;
            itemHeThongHoaDon.Enabled = logged;
            //Menu Quan lý tìm kiếm
            itemTimKiemDonThuoc.Enabled = logged;
            itemTimKiemHoaDon.Enabled = logged;
            itemTimKiemNhaCungCap.Enabled = logged;
            itemTimKiemNhanVien.Enabled = logged;
            itemTimKiemThongTinBenhNhan.Enabled = logged;
            itemTimKiemThuoc.Enabled = logged;
            // Menu Thống kê
            itemThongKeThuocBanRa.Enabled = logged;
            itemThongKeThuocNhapVao.Enabled = logged;
            itemThongKeThuocTrongKho.Enabled = logged;
            // Menu Báo cáo
            itemBaoCaoNam.Enabled = logged;
            itemBaoCaoQuy.Enabled = logged;
            itemBaoCaoThang.Enabled = logged;
            //Menu Quản lý thuốc
            itemQuanLyThongTinThuoc.Enabled = logged;
            itemQuanLyNhaCungCap.Enabled = logged;
            //Menu quản lý nhân viên
            itemQuanLyThongTinNhanVien.Enabled = logged;


            //Phân quyền theo nhóm
            switch (MaNhomNguoiDung)
            {
                // Nhóm Adminitrator => không làm ẩn Menu
                case "N001" : break;
                // Nhóm Nhân viên => ẩn một số menu mà nhóm này ko được truy nhập
                case "N002" : HienThiNhanVien(); break;
            }
        }

        // Tiếp theo ta xây dựng phương thức hiển thị Menu tùy theo nhóm người dùng 
        private void HienThiNhanVien()
        {
            //Tại đây ta viết thuộc tính ẩn cho nhóm Nhân viên
            itemQuanLyThongTinNhanVien.Enabled = false;//ẩn chức năng Quản lý thông tin  nhân viên vì chỉ Adminitrator mới có quyền

            
        }
        #endregion

        private void itemHeThongDangNhap_Click(object sender, EventArgs e)
        {
            int numErrorPassword = 0;
            //tạo biến continue
            Cont:
            // Kiểm tra form đăng nhập mở hay đóng nếu đóng thì new
            if (fdn == null || fdn.IsDisposed)
                fdn = new frmDangNhap();
            // Show dialog form đăng nhập
            if (fdn.ShowDialog() == DialogResult.OK)
            { 
                // Gọi hàm đăng nhập 
                // Gán cho biến user dùng chung trong lớp Utilities
                string username = fdn.txtUsername.Text;
                string passwd = fdn.txtPassword.Text;
                // Trước tiên kiểm tra xem user và pas có hợp lệ không?
                if (username.Equals(""))
                { 
                    //Gán thông báo cho lable thông báo
                    fdn.lblTrangThaiLogin.Text = "Username không hợp lệ";
                    // Quay lại lên đăng nhập tiếp
                    goto Cont;
                }

                if (passwd.Equals(""))
                {
                    //Gán thông báo cho lable thông báo
                    fdn.lblTrangThaiLogin.Text = "Password không hợp lệ";
                    // Quay lại lên đăng nhập tiếp
                    goto Cont;
                }
               // Lúc này mới lấy thông tin user
                Utilities.user = userBus.LayThongTinUser(username);//Xem kỹ lại phần này-Khởi tạo -Không là Static
                // Trường hợp user không tồn tại
                if (Utilities.user.Username.Equals(""))
                {
                    //Gán thông báo cho lable thông báo
                    fdn.lblTrangThaiLogin.Text = "User không tồn tại";
                    // Quay lại lên đăng nhập tiếp
                    goto Cont;
                }
                // Trường hợp pas sai
                if (Utilities.user.Passwd != passwd)
                {
                    //Gán thông báo cho lable thông báo
                    fdn.lblTrangThaiLogin.Text = "Password sai";
                    numErrorPassword++;
                    if (numErrorPassword == 3)
                        this.Close();
                    // Quay lại lên đăng nhập tiếp
                    goto Cont;
                }
                // Trường hợp đăng nhập thành công Set lại menu theo quyền user
                DisableMenuLogin(true, Utilities.user.MaNhom);



            }
        }

        private void frmMain_Load(object sender, EventArgs e)
        {
            //  Mặc định khi load lên
            DisableMenuLogin(false); // Disable all Menu
        }

        private void itemHeThongDangXuat_Click(object sender, EventArgs e)
        {
            // Khởi tạo lại biến user dùng chung
            User user = new User();
            Utilities.user = user;
            //Disable Menu
            DisableMenuLogin(false);
            //Mở lại form đăng nhập
            itemHeThongDangNhap_Click(sender, e); 
        }

        private void itemHeThongThoat_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void itemDoiMatKhau_Click(object sender, EventArgs e)
        {
        //Tạo biến continue
        Cont:
            if (fcp == null || fcp.IsDisposed)
                fcp = new frmChangePassword();
            if (fcp.ShowDialog() == DialogResult.OK)
            {
                string oldPass = fcp.txtOldPass.Text;
                string newPass = fcp.txtNewPass.Text;
                string reNePass = fcp.txtReNewPass.Text;
                if (oldPass.Equals("") || newPass.Equals("") || reNePass.Equals(""))
                {
                    fcp.lblThongBao.Text = "Bạn chưa điền đầy đủ thông tin";
                    goto Cont;
                }
                if (newPass != reNePass)
                {
                    fcp.lblThongBao.Text = "Mật khẩu mới nhập không trùng khớp";
                    goto Cont;
                }
                //Kiểm tra mật khẩu cũ có tồn tại hay không?
                if (oldPass != Utilities.user.Passwd)
                {
                    fcp.lblThongBao.Text = "Mật khẩu cũ không đúng";
                    goto Cont;
                }
                //Trường hợp OK all
                if (userBus.DoiPassword(newPass))
                {
                    MessageBox.Show("Đổi Password thành công");
                    // Cho đăng nhập lại
                    itemHeThongDangXuat_Click(sender, e);

                }
            }
        }

        private void itemHeThongThongTinBenhNhan_Click(object sender, EventArgs e)
        {
            frmThongTinhBenhNhan fsv = new frmThongTinhBenhNhan();
            fsv.MdiParent = this;
            fsv.Show();
        }

        private void danhMucCacLoaiThuôcToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmDanhMucThuoc fThuoc = new frmDanhMucThuoc();
            fThuoc.MdiParent = this;
            fThuoc.Show();
        }

        private void quanLyThuôcNhâpToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmNhapThuoc fThuocNhap = new frmNhapThuoc();
            fThuocNhap.MdiParent = this;
            fThuocNhap.Show();
        }

        private void quanLyThuôcBanRaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmBanThuoc fThuocBan = new frmBanThuoc();
            fThuocBan.MdiParent = this;
            fThuocBan.Show();
        }

        private void itemTimKiemThongTinBenhNhan_Click(object sender, EventArgs e)
        {
            frmTimKiemBenhNhan fTimKiemBN = new frmTimKiemBenhNhan();
            fTimKiemBN.MdiParent = this;
            fTimKiemBN.Show();
        }

        private void tìmKiếmDanhMụcThuốcToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmTimKiemThuoc fTimKiemThuoc = new frmTimKiemThuoc();
            fTimKiemThuoc.MdiParent = this;
            fTimKiemThuoc.Show();
        }

        private void tìmKiếmThuốcBánRaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmTimKiemThuocBanRa fTimKiemThuocBanRa = new frmTimKiemThuocBanRa();
            fTimKiemThuocBanRa.MdiParent = this;
            fTimKiemThuocBanRa.Show();
        }

        private void tìmKiếmThuốcNhậpVàoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmTimKiemThuocNhapVao fTimKiemThuocNhapVao = new frmTimKiemThuocNhapVao();
            fTimKiemThuocNhapVao.MdiParent = this;
            fTimKiemThuocNhapVao.Show();
        }


    }
}
